/***********************************************************************
* Copyright  2023 客户公司名称
* @URL: 
* @ProjectName: 项目名称
* @Description: 功能描述
* Modification Log :
------------------------------------------------------------------------
* Developer                   Date                   Description
* ----------------------------------------------------------------------
* name 陈秋雨			2023-10-23                    第一次创建 
***********************************************************************/
@RestResource(urlMapping = '/traRest/*')
global without sharing class InterfaceCallIn_RestApi {
    public InterfaceCallIn_RestApi() {
        //无参构造方法
    }

    /**
    * 功能描述  接收接口调用信息,获取调用到的方法,将接口信息传到对应方法中,最后返回接口信息。
    * @Author   陈秋雨
    * @DateTime 2023-10-23,
    * @param 无
    * @return  无
    */
    @HttpPost
    global static void doPost()  {
        // 获取请求
        RestRequest req  = RestContext.request;
        // 接口请求地址
        String reqUri = req.requestURI;
        System.debug('请求地址：' + reqUri);
        // 获取请求的方法名
        String methodName = reqUri.substring(reqUri.lastIndexOf('/') + 1);
        System.debug('请求方法名：' + methodName);
        // 响应给前端的数据
        Map<String,Object> mapRespData = new Map<string,Object>();
        // 每个方法需要返回给前端的数据
        Map<String,Object> mapReturnData = new Map<string,Object>();
        try {
             //请求数据
            String reqBodyStr = req.requestBody.toString();
            //结构化的请求体
            Map<String,Object> reqBody = (Map<string,Object>)JSON.deserializeUntyped(reqBodyStr);
            //判断调用接方法
            switch on methodName {
                when 'searchRecordMethod'{
                    mapReturnData = getSearchRecordMethod(reqBody);
                }
            }
        } catch(LimitException e){
            // 接口异常处理
        } finally{
            // 方法执行成功后将数据返回给前端
            mapRespData.putAll(mapReturnData);
            RestContext.response.responseBody =  BLob.valueof(JSON.serializePretty(mapRespData));
            RestContext.response.addHeader('Content-Type','application/json;charset=utf-8');
        }
    }

    /**
    * 功能描述
    * @Author   陈秋雨
    * @DateTime 2023-10-23,
    * @param 无
    * @return  无
    */
    public static Map<string,Object> getsearchRecordMethod(Map<string,Object>reqBody) {
        // 外键id
        String foreignKey = String.valueof(reqBody.get('foreignKey'));
        // 定义返面状态或错误描述
        String status = 'SUCCESS';
        //返回给前端的数据
        Map<string,Object> mapRespData = new Map<string,Object>();
        // 返回给前端的数据集合
        List<Map<string,Object>> datalist = new List<Map<string,Object>>();
        // 查询语句
        String queryString = 'SELECT Id,Name, CreatedById, ForeignKey__c FROM RestApi__c';
        if(String.isNotEmpty(foreignKey)){
            queryString += 'WHERE ForeignKey__c =\'' +foreignKey + '\'';
            // 直询MyAccount__c的集合
            List<RestApi__c> restApiList = new List<RestApic>();
            restApiList = Database.query(queryString);
            if(restApiList.isEmpty()){
                // 将每条记录存储在返回前段的map当中
                for(RestApi__c item : restApiList) {
                    // 将记录存储到返回的集合中
                    datalist.add(
                        new Map<String, Object>{
                            'name' => item.Name,
                            'remarks' => item.Remarks__c,
                            'forrignKey' => item.ForeignKey__c,
                            'transferType' => item.TransferType__c
                        }
                    );
                }
            } else {
                status = '根据外键Id没找到相关记录!';
            }
        } else {
            status = '外键Id不能为空!';
        }

        return mapRespData;
    }
}
